Different components, such as machines or applications and file systems operating on machines, cannot communicate unless they are explicitly programmed to understand each other. Domain-specific protocols have been developed that enable components to communicate with each other using a common language to partially deal with this difficulty. Even when components use the same domain-specific protocols, however, they are still limited in the types of communications they can engage in. For instance, components typically employ mechanisms for providing feedback or allowing clients to control some aspect of the component's behavior during interactions with the component. Examples include device control panels, directory/file selection windows or progress bar windows.
Unfortunately, these mechanisms are either inherent to the components themselves or are part of a pre-installed application. In either case, the specific instructions for these mechanisms must be known in advance by a component. This limits the ability for components to interact with each other in an ad hoc manner unless they are explicitly programmed to understand each other's mechanisms and speak the same domain-specific protocols. On the other hand, allowing clients unfettered access to interfaces that could be utilized to control some aspect of the component's behavior would create security risks, especially where sensitive information is involved.